#ifndef TRACKER_H
#define TRACKER_H

#include <string>
#include <iostream>
#include <vector>


#include <eq/eq.h>
using namespace vmml;
	
namespace Tracking{

	class TrackingDevice;

	#pragma endregion Typedefs

	#pragma region TrackingState
	enum TrackingState{
		UNTRACKED=0,
		TRACKED
	};
	#pragma endregion TrackingState

	#pragma region DeviceType
	enum DeviceType{
		ART=0,
		KINECT
	};
	#pragma endregion DeviceType

	class Tracker
	{
	public:

		Tracker();
		~Tracker();

		bool init();
		bool update();

		bool addTrackingDevice(TrackingDevice* device);
		TrackingDevice* getTrackingDevice(DeviceType type);
		void setWorldToEmitter( const mat4f& matrix )
            { _worldToEmitter = matrix; }
		bool isRunning();
		mat4f transformMatrix(const mat4f& matrix, DeviceType type);
	private:
		/* tracking devices */
		std::vector<TrackingDevice*> trackingDevices;

		/* world to emitter transformation */
		mat4f _worldToEmitter;

	};
}

#endif // FOB_TRACKER_H
